package com.zsrt.bbu.card.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;

import com.zsrt.bbu.card.dao.CardDao;
import com.zsrt.bbu.card.dao.impl.CardDaoImpl;
import com.zsrt.bbu.card.entity.CardEntity;
import com.zsrt.bbu.card.service.CardService;
import com.zsrt.common.ResponseEntity;
import com.zsrt.utils.MathUtil;

/**
 * 
 * @author zsrt
 *
 */

@Service
public class CardServiceImpl implements CardService {

	private CardDao dao = new CardDaoImpl();

	@Override
	public void add(CardEntity entity, Map<String, Object> mp) {
		try {

			System.out.println("进入CardServiceImpl...");
			// 1 入参检测： 要保证所有的数据都是合法数据 balance 200.23 aaa "" 455 aabc 避免注入的问题的

			boolean flag = checkEntity(entity);

			if (flag) {

				// 2 做也业务逻辑的判断 卡号不能重复 139
				// dao.checkDouble();

				// 3 直接调用dao的方法
				dao.add(entity);
				mp.put(ResponseEntity.RESULT, ResponseEntity.getSuccessMessage());
			} else {
				mp.put(ResponseEntity.RESULT, ResponseEntity.getFailureMessage());
			}

		} catch (Exception e) {
			//记录日志
			mp.put(ResponseEntity.RESULT, ResponseEntity.getFailureMessage());
		}

	}

	/**
	 * 你要认为所有的数据都是非法的数据 都必须经过检测。
	 * 
	 * @param entity
	 * @return
	 */
	private boolean checkEntity(CardEntity entity) {

		// 1 检测卡号
		String cardNo = entity.getCardNo();

		// 如果卡号没有 直接检测就不通过
		if (cardNo == null || "".equals(cardNo)) {
			return false;
		} else {
			// 18个数字 正则表达式
			if (MathUtil.checkCard(cardNo) != true) {
				return false;
			}
		}

		// 2 检测余额 ??

		// 3 检测 持卡人
		return true;
	}

	@Override
	public void findAllCards(Map<String, Object> mp) {
		try {
			List<CardEntity> list = dao.findAllCards();
			mp.put("data", list);
			mp.put(ResponseEntity.RESULT, ResponseEntity.getSuccessMessage());
		} catch (Exception e) {
			//记录日志
			// 在项目中的正规做法 只要有任何能够捕获错误 都需要记录日志
			mp.put(ResponseEntity.RESULT, ResponseEntity.getFailureMessage());
			e.printStackTrace();
		}

	}

	@Override
	public void update(CardEntity entity, Map<String, Object> mp) {
		try {
			// 1 进行入参检测 空串

			// 2 修改之后的卡号不能跟其他已经有的卡号重名 数组

			// 3 做修改
			dao.update(entity);

			mp.put(ResponseEntity.RESULT, ResponseEntity.getSuccessMessage());
		} catch (Exception e) {
			//记录日志
			// 在项目中的正规做法 只要有任何能够捕获错误 都需要记录日志
			mp.put(ResponseEntity.RESULT, ResponseEntity.getFailureMessage());
			e.printStackTrace();
		}

	}

	@Override
	public void findById(Integer id, Map<String, Object> mp) {
		CardEntity card = new CardEntity();
		try {
			System.out.println("--findById---");
			// 1 进行入参检测 空串

			// 2 修改之后的卡号不能跟其他已经有的卡号重名 数组

			// 3 做修改
			card = dao.findById(id);
			
			mp.put("data", card);
			mp.put(ResponseEntity.RESULT, ResponseEntity.getSuccessMessage());
		} catch (Exception e) {
			mp.put("data", card);
			// 在项目中的正规做法 只要有任何能够捕获错误 都需要记录日志
			mp.put(ResponseEntity.RESULT, ResponseEntity.getFailureMessage());
			e.printStackTrace();
		}
		
	}

}
